//Elizabeth Sellers
//IMPORTS//
import javax.swing.*;
//import javax.swing.plaf.metal.MetalButtonUI;
//import javax.swing.plaf.metal.MetalToggleButtonUI;
import java.awt.*;
import java.awt.event.*;
public class MinesweeperGUI implements ActionListener, ItemListener{
//CREATE GUI OBJECTS//
JFrame myFrame = new JFrame();
JPanel contentPane = new JPanel();
JMenuBar menu = new JMenuBar();
JMenu options = new JMenu("Options");
JMenuItem newGame = new JMenuItem("New Game");
JMenu difficulty = new JMenu("Difficulty");
JMenuItem easy = new JMenuItem("Easy");
JMenuItem medium = new JMenuItem("Medium");
JMenuItem hard = new JMenuItem("Hard");
JMenu changeColors = new JMenu("Change Theme");
JMenuItem pastel = new JMenuItem("Pastel");
JMenuItem dark = new JMenuItem("Dark");
JMenuItem neon = new JMenuItem("Neon");
JMenuItem exit = new JMenuItem("Exit");
JMenu flagsLeft = new JMenu();
JMenu spaceMaker = new JMenu(" ");
//MODE SWITCH//
// ImageIcon flag = new ImageIcon("C:\\Users\\eliza\\eclipse-workspace\\java\\Project - Minesweeper\\src\\Flag.png");
// ImageIcon bomb = new ImageIcon("C:\\Users\\eliza\\eclipse-workspace\\java\\Project - Minesweeper\\src\\Bomb.png");
ImageIcon flag = new ImageIcon(MinesweeperGUI.class.getResource("Flag.png"));
ImageIcon bomb = new ImageIcon(MinesweeperGUI.class.getResource("Bomb.png"));
JToggleButton flags = new JToggleButton(bomb, false);
//COLOR SCHEMES//
//Pastel//
//Main//
Color pastelHiddenDark = new Color(61, 126, 148);
Color pastelHiddenLight = new Color(56, 119, 141);
Color pastelRevealedDark = new Color(244, 210, 184);
Color pastelRevealedLight = new Color(255, 221, 194);
Color pastelBorder = new Color(85, 85, 85);
Color pastel1 = new Color(141, 188, 232);
Color pastel2 = new Color(99, 194, 103);
Color pastel3 = new Color(233, 132, 147);
Color pastel4 = new Color(199, 161, 231);
Color pastel5 = new Color(239, 177, 99);
Color pastel6 = new Color(162, 223, 243);
Color pastel7 = new Color(130, 130, 130);
Color pastel8 = new Color(180, 180, 180);
//Dark//
Color darkHiddenDark = new Color(57, 57, 57);
Color darkHiddenLight = new Color(63, 63, 63);
Color darkRevealedDark = new Color(99, 99, 99);
Color darkRevealedLight = new Color(89, 89, 89);
Color darkBorder = new Color(150, 150, 150);
Color dark1 = new Color(29, 42, 151);
Color dark2 = new Color(20, 55, 19);
Color dark3 = new Color(151, 35, 35);
Color dark4 = new Color(110, 35, 144);
Color dark5 = new Color(226, 175, 0);
Color dark6 = new Color(35, 151, 148);
Color dark7 = new Color(124, 124, 124);
Color dark8 = new Color(154, 154, 154);
//Neon//
Color neonHiddenDark = new Color(37, 37, 37);
Color neonHiddenLight = new Color(46, 46, 46);
Color neonRevealedDark = new Color(96, 96, 96);
Color neonRevealedLight = new Color(86, 86, 86);
Color neon1 = new Color(0, 15, 255);
Color neon2 = new Color(0, 244, 41);
Color neon3 = new Color(236, 0, 0);
Color neon4 = new Color(164, 25, 255);
Color neon5 = new Color(255, 233, 24);
Color neon6 = new Color(24, 255, 252);
Color neon7 = new Color(198, 198, 198);
Color neon8 = new Color(237, 237, 237);
//Active Color Scheme//
Color hiddenDark = pastelHiddenDark;
Color hiddenLight = pastelHiddenLight;
Color revealedDark = pastelRevealedDark;
Color revealedLight = pastelRevealedLight;
Color borderColor = pastelBorder;
Color num1Color = pastel1;
Color num2Color = pastel2;
Color num3Color = pastel3;
Color num4Color = pastel4;
Color num5Color = pastel5;
Color num6Color = pastel6;
Color num7Color = pastel7;
Color num8Color = pastel8;
//UNICODE CHARACTERS FOR COPY PASTE//
/*
FLAG ⚑ 🏲 🚩 🏲
BOMB 💣
*/
//CREATE COMPUTATIONAL OBJECTS//
JButton[][] buttons;
String[][] key;
int numOfRows;
int numOfColumns;
int numOfMines;
int bombsLeft;
boolean flagMode = false;
int difficultyLevel = 0; // 0 = default (0.161985596) | 1 = easy (0.125691358) | 2 = medium (0.17825) | 3 = hard (0.206125)
boolean hadInitialClick = false;
public MinesweeperGUI() {
//CREATE FRAME//
myFrame.setTitle("Minesweeper");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setSize(1000, 800);
myFrame.setLocationRelativeTo(null);
//ADD OBJECTS TO FRAME//
myFrame.add(menu);
menu.add(options);
options.add(newGame);
options.add(difficulty);
difficulty.add(easy);
difficulty.add(medium);
difficulty.add(hard);
options.add(changeColors);
changeColors.add(pastel);
changeColors.add(dark);
changeColors.add(neon);
options.addSeparator();
options.add(exit);
menu.add(Box.createHorizontalGlue());
menu.add(flagsLeft);
menu.add(flags);
menu.add(spaceMaker);
myFrame.setJMenuBar(menu);
myFrame.add(contentPane);
//ADD ACTION LISTENER//
exit.addActionListener(this);
newGame.addActionListener(this);
easy.addActionListener(this);
medium.addActionListener(this);
hard.addActionListener(this);
pastel.addActionListener(this);
dark.addActionListener(this);
neon.addActionListener(this);
flags.addItemListener(this);
menu.setBackground(Color.WHITE);
flags.setBackground(null);
flags.setBorder(BorderFactory.createLineBorder(Color.WHITE));
//flags.setBorder(null);
myFrame.setVisible(true);
gameStart();
}//ends method - constructor - MinesweeperGUI
//TOGGLE BUTTON//
public void itemStateChanged(ItemEvent eve) {
if (flags.isSelected()) {
flags.setIcon(flag);
flagMode = true;
}
else {
flags.setIcon(bomb);
flagMode = false;
}
}//ends method - itemStateChanged
//ACTIONS//
public void actionPerformed(ActionEvent e) {
Object control = e.getSource();
//NEW GAME
if(control == newGame) {
difficultyLevel = 0;
clear();
gameStart();
}
//CHANGE DIFFICULTY//
if(control == easy) {
difficultyLevel = 1;
clear();
gameStart();
}
if(control == medium) {
difficultyLevel = 2;
clear();
gameStart();
}
if(control == hard) {
difficultyLevel = 3;
clear();
gameStart();
}
//CHANGE COLOR SCHEME//
if(control == pastel) { //PASTEL//
contentPane.repaint();
updateColors("pastel");
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
colorNums(i, j);
updateBG(i, j, "pastel");
buttons[i][j].setBorder(BorderFactory.createLineBorder(borderColor));
buttons[i][j].repaint();
}
}//ends for loop
}//ends pastel
if(control == dark) { //DARK THEME//
updateColors("dark");
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
colorNums(i, j);
updateBG(i, j, "dark");
buttons[i][j].setBorder(BorderFactory.createLineBorder(borderColor));
buttons[i][j].repaint();
}
}//ends for loop
}//ends dark
if(control == neon) { //NEON//
contentPane.repaint();
for(int i = 0; i < numOfRows; i++) {
updateColors("neon");
for(int j = 0; j < numOfColumns; j++) {
colorNums(i, j);
updateBG(i, j, "neon");
buttons[i][j].setBorder(BorderFactory.createLineBorder(borderColor));
buttons[i][j].repaint();
}
}//ends for loop
}//ends neon
//EXIT//
if(control == exit) {
myFrame.dispose();
}
for(int i = 0; i < buttons.length; i++) {
for(int j = 0; j < buttons[i].length; j++) {
if(control == buttons[i][j]) {
//FIXES ORIGINAL SPOT AND CLEARS OUT AREA//
if(!hadInitialClick) {
initialClick(i, j);
}
//PLACE A FLAG//
if(flagMode) {
if(buttons[i][j].getText() == "🏲") {
buttons[i][j].setText("");
bombsLeft++;
flagsLeft.setText("🏲 " + bombsLeft);
}
else if (buttons[i][j].getText() == "") {
buttons[i][j].setText("🏲");
buttons[i][j].setForeground(num3Color);
bombsLeft--;
flagsLeft.setText("🏲 " + bombsLeft);
}
}//ends flagMode Instructions
else {
if(buttons[i][j].getText() == "🏲") {
//DO NOTHING//
}//if flag picked, do nothing
//IF A MINE IS PICKED//
else if(key[i][j].equals("💣")) {
buttons[i][j].setText(key[i][j]);
if(buttons[i][j].getBackground() == hiddenLight || buttons[i][j].getBackground() == revealedLight) {
buttons[i][j].setBackground(revealedLight);
}
else {
buttons[i][j].setBackground(revealedDark);
}
int restart = JOptionPane.showConfirmDialog(null, "Game Over! \nDo you want to start a new game?", "Exit Dialogue",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if(restart == JOptionPane.YES_OPTION) {
clear();
gameStart();
}
else if(restart == JOptionPane.NO_OPTION) {
myFrame.dispose();
}
}//ends if a mine is picked
else if(key[i][j].equals(" ")) {
buttons[i][j].setText(key[i][j]);
if(buttons[i][j].getBackground() == hiddenLight || buttons[i][j].getBackground() == revealedLight || buttons[i][j].getBackground() == revealedLight) {
buttons[i][j].setBackground(revealedLight);
}
else {
buttons[i][j].setBackground(revealedDark);
}
reveal(i, j);
}
else {
buttons[i][j].setText(key[i][j]);
colorNums(i, j);
if(buttons[i][j].getBackground() == hiddenLight || buttons[i][j].getBackground() == revealedLight) {
buttons[i][j].setBackground(revealedLight);
}
else {
buttons[i][j].setBackground(revealedDark);
}
}
}//ends button click
//CHECK IF THE GAME IS COMPLETE//
if(checkWin()) {
int restart = JOptionPane.showConfirmDialog(null, "Congratulations! You Won! \nDo you want to start a new game?", "Exit Dialogue",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
if(restart == JOptionPane.YES_OPTION) {
difficultyLevel = 0;
clear();
gameStart();
}
else if(restart == JOptionPane.NO_OPTION) {
myFrame.dispose();
}
}
}//ends if statement
}//ends inner for
}//ends outer for loop
}//ends method - actionPerformed
//START GAME AND GET GAME SIZE//
public void gameStart() {
//clear();
hadInitialClick = false;
//variables//
JTextField rows = new JTextField();
JTextField columns = new JTextField();
Object[] message = {
"Number of Rows:", rows,
"Number of Columns:", columns
};
//pop-up box//
int option = JOptionPane.showConfirmDialog(null, message, "Input Size", JOptionPane.OK_CANCEL_OPTION);
if (option == JOptionPane.OK_OPTION) {
try {
if(checkIfNum(rows) && checkIfNum(columns)) {
if (Integer.parseInt(rows.getText()) > 0 && Integer.parseInt(columns.getText()) > 0) {
numOfRows = Integer.parseInt(rows.getText());
numOfColumns = Integer.parseInt(columns.getText());
}//ends if
else {
JOptionPane.showMessageDialog(null, "Inputed Values Invalid", "Invalid Inputs", JOptionPane.PLAIN_MESSAGE);
}//ends inner if-else
}//ends outer if
} catch(Exception e) {
JOptionPane.showMessageDialog(null, "Inputed Values Invalid", "Invalid Inputs", JOptionPane.PLAIN_MESSAGE);
}
//ends try-catch
}//ends if
else {
//myFrame.dispose();
System.exit(0);
}//ends if-else
//CALCULATE THE NUMBER OF MINES//
if(difficultyLevel == 0) { //DEFAULT
numOfMines = (int) (Math.ceil((numOfRows*numOfColumns)*0.161985596));
}
else if(difficultyLevel == 1) {//EASY
numOfMines = (int) (Math.ceil((numOfRows*numOfColumns)*0.125691358));
}
else if(difficultyLevel == 2) {//MEDIUM
numOfMines = (int) (Math.ceil((numOfRows*numOfColumns)*0.17825));
}
else if(difficultyLevel == 3) {//HARD
numOfMines = (int) (Math.ceil((numOfRows*numOfColumns)*0.206125));
}
//System.out.println(numOfMines);
flagsLeft.setText("🏲 " + numOfMines);
bombsLeft = numOfMines;
//CREATE VIEWABLE GRID AND ANSWER KEY//
buttons = new JButton[numOfRows][numOfColumns];
key = new String[numOfRows][numOfColumns];
System.out.println(bombsLeft);
//CREATE BUTTONS//
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
buttons[i][j] = new JButton("");
key[i][j] = " ";
}
}//ends for loop
//System.out.println(buttons[0][0].getSize());
//System.out.println(buttons[0][0].getWidth());
//RANDOMLY PLACE MINES AND ASSIGN NUMBERS//
placeMines(numOfMines);
placeNums();
bombsLeft = numOfMines;
int sizeOfFont = 50;
if(numOfRows < numOfColumns) {
sizeOfFont = (int) (Math.ceil(800/numOfRows)*0.5);
sizeOfFont = (int) (Math.ceil(800/numOfRows)*0.5);
}
else if(numOfRows > numOfColumns) {
sizeOfFont = (int) (Math.ceil(800/numOfColumns)*0.5);
}
//System.out.println(contentPane.getHeight());
//Font buttonFont = new Font("Ariel", Font.PLAIN, 50);
Font buttonFont = new Font("Ariel", Font.PLAIN, sizeOfFont);
//CUSTOMIZE OBJECTS//
contentPane.setLayout(new GridLayout(numOfRows, numOfColumns));
//COUNTER FOR BUTTON INITIAL BACKGROUND COLOR//
int colorCounter = 0;
//boolean ifRun = false;
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
contentPane.add(buttons[i][j]);
buttons[i][j].setFocusable(false);
buttons[i][j].setRolloverEnabled(false);
buttons[i][j].addActionListener(this);
buttons[i][j].setFont(buttonFont);
if(colorCounter%2 == 0) {
//buttons[i][j].setBackground(new Color(61, 126, 148));
buttons[i][j].setBackground(hiddenDark);
colorCounter++;
if(numOfColumns%2 == 0 && (buttons[i][numOfColumns-1].getBackground() == hiddenDark || buttons[i][numOfColumns-1].getBackground() == hiddenLight)) {
colorCounter++;
}
}
else {
//buttons[i][j].setBackground(new Color(56, 119, 141));
buttons[i][j].setBackground(hiddenLight);
colorCounter++;
if(numOfColumns%2 == 0 && (buttons[i][numOfColumns-1].getBackground() == hiddenDark || buttons[i][numOfColumns-1].getBackground() == hiddenLight)) {
colorCounter++;
}
}
buttons[i][j].setForeground(Color.BLACK);
//buttons[i][j].setBorder(BorderFactory.createLineBorder(new Color(85, 85, 85)));
buttons[i][j].setBorder(BorderFactory.createLineBorder(borderColor));
}//ends inner for loop
}//ends for loop
//System.out.println("This is the height: " + buttons[0][0].getHeight());
}//ends method - gameStart
//CHECK IF INPUTTED VALUES ARE A NUM//
public boolean checkIfNum(JTextField num) {
String input = num.getText();
for(int i = 0; i < input.length(); i++) {
if(input.charAt(i) > 47 && input.charAt(i) < 58) {
} else {
return false;
}
}//ends for loop
return true;
}//ends checkIfNum
//PLACE MINES//
public void placeMines(int numPlacing) {
//INITIALLIZE RANDOM NUMBER STORAGE//
int randRows;
int randCols;
//CREATE 2D ARRAY & PLACE MINES RANDOMLY//
for(int i = 0; i < numPlacing; i++) {
randRows = (int) (Math.floor(Math.random()*((numOfRows-1)-0+1)+0));
randCols = (int) (Math.floor(Math.random()*((numOfColumns-1)-0+1)+0));
if(!key[randRows][randCols].equals("💣")) {
key[randRows][randCols] = "💣";
}
else {
i++;
}
}//ends for loop
}//ends method - placeMines
//PLACE NUMBERS//
public void placeNums() {
int minesDetected;
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
minesDetected = 0;
if(!key[i][j].equals("💣")) {
//TOP LEFT//
try {
if(key[i-1][j-1].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//TOP MIDDLE//
try {
if(key[i-1][j].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//TOP RIGHT//
try {
if(key[i-1][j+1].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//CENTER LEFT//
try {
if(key[i][j-1].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//CENTER RIGHT//
try {
if(key[i][j+1].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//BOTTOM LEFT//
try {
if(key[i+1][j-1].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//BOTTOM MIDDLE//
try {
if(key[i+1][j].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
//BOTTOM RIGHT//
try {
if(key[i+1][j+1].equals("💣")) {
minesDetected++;
}
}
catch(Exception ArrayIndexOutOfBoundsException) {
}//ends try catch
}//ends if statement
if(minesDetected > 0) {
key[i][j] = minesDetected + "";
//buttons[i][j].setText(minesDetected + "");
}
}//ends inner for
}//ends outer for
}//ends method - placeNums
//1ST CLICK IS NEVER A BOMB//
public void initialClick (int xValue, int yValue) {
//MOVE MINE INITIAL PLACE IS NOT 0//
while(key[xValue][yValue] != " " && key[xValue][yValue] != "") {
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
key[i][j] = " ";
}
}//ends for loop
placeMines(numOfMines);
placeNums();
//System.out.println("HAD TO REDO");
}//ends while
//PRINT KEY//
for(int i = 0; i < numOfRows; i++) {
for(int j = 0; j < numOfColumns; j++) {
if(key[i][j] == " ") {
System.out.print("* ");
}
else {
System.out.print(key[i][j] + " ");
}
}
System.out.println();
}//ends for loop
System.out.println();
buttons[xValue][yValue].setText(key[xValue][yValue]);
if(buttons[xValue][yValue].getBackground() == hiddenLight || buttons[xValue][yValue].getBackground() == revealedLight) {
buttons[xValue][yValue].setBackground(revealedLight);
}
else {
buttons[xValue][yValue].setBackground(revealedDark);
}
reveal(xValue, yValue);
hadInitialClick = true;
}//ends method - initialClick
//REVEAL NOT BOMB SPACES
public void reveal(int x, int y) {
//count++;
//System.out.println(count);
//UPPER LEFT//
try {
if(buttons[x-1][y-1].getText().equals("")) {
if((key[x-1][y-1] == " ")) {
buttons[x-1][y-1].setText(key[x-1][y-1]);
if(buttons[x-1][y-1].getBackground() == hiddenLight) {
buttons[x-1][y-1].setBackground(revealedLight);
}
else {
buttons[x-1][y-1].setBackground(revealedDark);
}
colorNums(x-1, y-1);
reveal(x-1, y-1);
//System.out.println("INSIDE TRY IF");
}
else {
buttons[x-1][y-1].setText(key[x-1][y-1]);
if(buttons[x-1][y-1].getBackground() == hiddenLight) {
buttons[x-1][y-1].setBackground(revealedLight);
}
else {
buttons[x-1][y-1].setBackground(revealedDark);
}
colorNums(x-1, y-1);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//UPPER MIDDLE//
try {
if(buttons[x-1][y].getText().equals("")) {
if((key[x-1][y] == " ")) {
buttons[x-1][y].setText(key[x-1][y]);
if(buttons[x-1][y].getBackground() == hiddenLight) {
buttons[x-1][y].setBackground(revealedLight);
}
else {
buttons[x-1][y].setBackground(revealedDark);
}
colorNums(x-1, y);
reveal(x-1, y);
}
else {
buttons[x-1][y].setText(key[x-1][y]);
if(buttons[x-1][y].getBackground() == hiddenLight) {
buttons[x-1][y].setBackground(revealedLight);
}
else {
buttons[x-1][y].setBackground(revealedDark);
}
colorNums(x-1, y);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//UPPER RIGHT//
try {
if(buttons[x-1][y+1].getText().equals("")) {
if((key[x-1][y+1] == " ")) {
buttons[x-1][y+1].setText(key[x-1][y+1]);
if(buttons[x-1][y+1].getBackground() == hiddenLight) {
buttons[x-1][y+1].setBackground(revealedLight);
}
else {
buttons[x-1][y+1].setBackground(revealedDark);
}
colorNums(x-1, y+1);
reveal(x-1, y+1);
}
else {
buttons[x-1][y+1].setText(key[x-1][y+1]);
if(buttons[x-1][y+1].getBackground() == hiddenLight) {
buttons[x-1][y+1].setBackground(revealedLight);
}
else {
buttons[x-1][y+1].setBackground(revealedDark);
}
colorNums(x-1, y+1);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//MIDDLE LEFT//
try {
if(buttons[x][y-1].getText().equals("")) {
if((key[x][y-1] == " ")) {
buttons[x][y-1].setText(key[x][y-1]);
if(buttons[x][y-1].getBackground() == hiddenLight) {
buttons[x][y-1].setBackground(revealedLight);
}
else {
buttons[x][y-1].setBackground(revealedDark);
}
colorNums(x, y-1);
reveal(x, y-1);
}
else {
buttons[x][y-1].setText(key[x][y-1]);
if(buttons[x][y-1].getBackground() == hiddenLight) {
buttons[x][y-1].setBackground(revealedLight);
}
else {
buttons[x][y-1].setBackground(revealedDark);
}
colorNums(x, y-1);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//MIDDLE RIGHT//
try {
if(buttons[x][y+1].getText().equals("")) {
if((key[x][y+1] == " ")) {
buttons[x][y+1].setText(key[x][y+1]);
if(buttons[x][y+1].getBackground() == hiddenLight) {
buttons[x][y+1].setBackground(revealedLight);
}
else {
buttons[x][y+1].setBackground(revealedDark);
}
colorNums(x, y+1);
reveal(x, y+1);
}
else {
buttons[x][y+1].setText(key[x][y+1]);
if(buttons[x][y+1].getBackground() == hiddenLight) {
buttons[x][y+1].setBackground(revealedLight);
}
else {
buttons[x][y+1].setBackground(revealedDark);
}
colorNums(x, y+1);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//BOTTOM LEFT//
try {
if(buttons[x+1][y-1].getText().equals("")) {
if((key[x+1][y-1] == " ")) {
buttons[x+1][y-1].setText(key[x+1][y-1]);
if(buttons[x+1][y-1].getBackground() == hiddenLight) {
buttons[x+1][y-1].setBackground(revealedLight);
}
else {
buttons[x+1][y-1].setBackground(revealedDark);
}
colorNums(x+1, y-1);
reveal(x+1, y-1);
}
else {
buttons[x+1][y-1].setText(key[x+1][y-1]);
if(buttons[x+1][y-1].getBackground() == hiddenLight) {
buttons[x+1][y-1].setBackground(revealedLight);
}
else {
buttons[x+1][y-1].setBackground(revealedDark);
}
colorNums(x+1, y-1);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//BOTTOM MIDDLE//
try {
if(buttons[x+1][y].getText().equals("")) {
if((key[x+1][y] == " ")) {
buttons[x+1][y].setText(key[x+1][y]);
if(buttons[x+1][y].getBackground() == hiddenLight) {
buttons[x+1][y].setBackground(revealedLight);
}
else {
buttons[x+1][y].setBackground(revealedDark);
}
colorNums(x+1, y);
reveal(x+1, y);
}
else {
buttons[x+1][y].setText(key[x+1][y]);
if(buttons[x+1][y].getBackground() == hiddenLight) {
buttons[x+1][y].setBackground(revealedLight);
}
else {
buttons[x+1][y].setBackground(revealedDark);
}
colorNums(x+1, y);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
//BOTTOM RIGHT//
try {
if(buttons[x+1][y+1].getText().equals("")) {
if((key[x+1][y+1] == " ")) {
buttons[x+1][y+1].setText(key[x+1][y+1]);
if(buttons[x+1][y+1].getBackground() == hiddenLight) {
buttons[x+1][y+1].setBackground(revealedLight);
}
else {
buttons[x+1][y+1].setBackground(revealedDark);
}
colorNums(x+1, y+1);
reveal(x+1, y+1);
}
else {
buttons[x+1][y+1].setText(key[x+1][y+1]);
if(buttons[x+1][y+1].getBackground() == hiddenLight) {
buttons[x+1][y+1].setBackground(revealedLight);
}
else {
buttons[x+1][y+1].setBackground(revealedDark);
}
colorNums(x+1, y+1);
}
}
}
catch (ArrayIndexOutOfBoundsException Exception) {
} catch (IndexOutOfBoundsException Exception) {
}
}//ends method - reveal
//CHANGE COLOR VALUES//
public void updateColors(String type) {
if(type == "pastel") {
hiddenDark = pastelHiddenDark;
hiddenLight = pastelHiddenLight;
revealedDark = pastelRevealedDark;
revealedLight = pastelRevealedLight;
borderColor = pastelBorder;
num1Color = pastel1;
num2Color = pastel2;
num3Color = pastel3;
num4Color = pastel4;
num5Color = pastel5;
num6Color = pastel6;
num7Color = pastel7;
num8Color = pastel8;
}//ends pastel
if(type == "dark") {
hiddenDark = darkHiddenDark;
hiddenLight = darkHiddenLight;
revealedDark = darkRevealedDark;
revealedLight = darkRevealedLight;
borderColor = darkBorder;
num1Color = dark1;
num2Color = dark2;
num3Color = dark3;
num4Color = dark4;
num5Color = dark5;
num6Color = dark6;
num7Color = dark7;
num8Color = dark8;
}//ends dark
if(type == "neon") {
hiddenDark = neonHiddenDark;
hiddenLight = neonHiddenLight;
revealedDark = neonRevealedDark;
revealedLight = neonRevealedLight;
borderColor = darkBorder;
num1Color = neon1;
num2Color = neon2;
num3Color = neon3;
num4Color = neon4;
num5Color = neon5;
num6Color = neon6;
num7Color = neon7;
num8Color = neon8;
}//ends neon
}//ends updateColors
//UPDATE BACKGROUND COLOR//
public void updateBG (int x, int y, String type) {
if(type == "pastel") {
if(buttons[x][y].getBackground() == darkHiddenDark || buttons[x][y].getBackground() == neonHiddenDark) { //BLUE//
buttons[x][y].setBackground(hiddenDark);
}
else if(buttons[x][y].getBackground() == darkHiddenLight || buttons[x][y].getBackground() == neonHiddenLight) { //BLUE//
buttons[x][y].setBackground(hiddenLight);
}
else if(buttons[x][y].getBackground() == darkRevealedDark || buttons[x][y].getBackground() == neonRevealedDark) { //BLUE//
buttons[x][y].setBackground(revealedDark);
}
else if(buttons[x][y].getBackground() == darkRevealedLight || buttons[x][y].getBackground() == neonRevealedLight) { //BLUE//
buttons[x][y].setBackground(revealedLight);
}
}//ends pastel
if(type == "dark") {
if(buttons[x][y].getBackground() == pastelHiddenDark || buttons[x][y].getBackground() == neonHiddenDark) { //BLUE//
buttons[x][y].setBackground(hiddenDark);
}
else if(buttons[x][y].getBackground() == pastelHiddenLight || buttons[x][y].getBackground() == neonHiddenLight) { //BLUE//
buttons[x][y].setBackground(hiddenLight);
}
else if(buttons[x][y].getBackground() == pastelRevealedDark || buttons[x][y].getBackground() == neonRevealedDark) { //BLUE//
buttons[x][y].setBackground(revealedDark);
}
else if(buttons[x][y].getBackground() == pastelRevealedLight || buttons[x][y].getBackground() == neonRevealedLight) { //BLUE//
buttons[x][y].setBackground(revealedLight);
}
}//ends dark
if(type == "neon") {
if(buttons[x][y].getBackground() == darkHiddenDark || buttons[x][y].getBackground() == pastelHiddenDark) { //BLUE//
buttons[x][y].setBackground(hiddenDark);
}
else if(buttons[x][y].getBackground() == darkHiddenLight || buttons[x][y].getBackground() == pastelHiddenLight) { //BLUE//
buttons[x][y].setBackground(hiddenLight);
}
else if(buttons[x][y].getBackground() == darkRevealedDark || buttons[x][y].getBackground() == pastelRevealedDark) { //BLUE//
buttons[x][y].setBackground(revealedDark);
}
else if(buttons[x][y].getBackground() == darkRevealedLight || buttons[x][y].getBackground() == pastelRevealedLight) { //BLUE//
buttons[x][y].setBackground(revealedLight);
}
}//ends neon
}//ends method - update BackGround
//COLOR NUMBERS//
public void colorNums(int x, int y) {
if(buttons[x][y].getText().equals("1")) { //BLUE//
buttons[x][y].setForeground(num1Color);
}
else if(buttons[x][y].getText().equals("2")) { //GREEN//
buttons[x][y].setForeground(num2Color);
}
else if(buttons[x][y].getText().equals("3") || buttons[x][y].getText().equals("🏲")) { //RED//
buttons[x][y].setForeground(num3Color);
}
else if(buttons[x][y].getText().equals("4")) { //PURPLE//
buttons[x][y].setForeground(num4Color);
}
else if(buttons[x][y].getText().equals("5")) { //YELLOW//
buttons[x][y].setForeground(num5Color);
}
else if(buttons[x][y].getText().equals("6")) { //LIGHT BLUE//
buttons[x][y].setForeground(num6Color);
}
else if(buttons[x][y].getText().equals("7")) { //DARK GREY//
buttons[x][y].setForeground(num7Color);
}
else if(buttons[x][y].getText().equals("8")) { //LIGHT GREY//
buttons[x][y].setForeground(num8Color);
}
}//ends method - colorNums
//CHECK IF THE GAME WAS WON//
public boolean checkWin() {
for(int i = 0; i < buttons.length; i++) {
for(int j = 0; j < buttons[i].length; j++) {
if(!key[i][j].equals("💣")) {
// if(buttons[i][j].getText() == "*") {
//
// }
if(buttons[i][j].getText() == key[i][j]) {
}
else {
return false;
}
}
}//ends inner for
}//ends outer for loop
return true;
}//ends method - checkWin
//NEW GAME | CLEARS BOARD//
public void clear() {
Component[] contents = contentPane.getComponents();
for(Component C: contents) {
if(C instanceof JButton) {
contentPane.remove(C);
contentPane.repaint();
}
}
}
}//ends class - MinesweeperGUI